package com.carlinfo.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.carlinfo.common.dao.impl.BaseDaoImpl;
import com.carlinfo.common.util.PageInfoUtil;
import com.carlinfo.dao.IDynastyDao;
import com.carlinfo.pojo.ADynasty;

public class DynastyDaoImpl extends BaseDaoImpl<ADynasty> implements IDynastyDao
{
	public int saveOneDao(ADynasty dynasty)
	{
		/*	准备一个容器  把参数放到容器中	*/
		List<Object> paramsList = new ArrayList<Object>();
		/*	添加一个朝代 	*/
		String sql = "insert into a_dynasty values (null,?,?,?,?,?,?,?,?,?)";
		paramsList.add(dynasty.getName());
		paramsList.add(dynasty.getCapital());
		paramsList.add(dynasty.getAge());
		paramsList.add(dynasty.getSt());
		paramsList.add(dynasty.getContext());
		paramsList.add(dynasty.getStatus());
		paramsList.add(dynasty.getCreateTime());
		paramsList.add(dynasty.getUpdateTime());
		paramsList.add(dynasty.getPubTime());
		
		Map<String, Object> resultMap = new HashMap<String, Object>();
		
		int res = super.executeJDBC(sql, paramsList, resultMap);
		
		dynasty.setId(Integer.valueOf(resultMap.get("id") + ""));
		
		return res ;
	}

	@Override
	public int updateOneDao(ADynasty dynasty)
	{
		List<Object> paramsList = new ArrayList<Object>();
		/*	更新的sql语句	*/
		String sql = "update a_dynasty set name = ? , capital = ? , age = ? , st = ? ,"
				+ " context = ? , status = ? , createTime = ? , updateTime = ? , pubTime = ? where  id = ? ";

		/*	为占位符赋值	*/
		paramsList.add(dynasty.getName());
		paramsList.add(dynasty.getCapital());
		paramsList.add(dynasty.getAge());
		paramsList.add(dynasty.getSt());
		paramsList.add(dynasty.getContext());
		paramsList.add(dynasty.getStatus());
		paramsList.add(dynasty.getCreateTime());
		paramsList.add(dynasty.getUpdateTime());
		paramsList.add(dynasty.getPubTime());
		paramsList.add(dynasty.getId());
		
		return 	super.executeJDBC(sql, paramsList);
	}

	@Override
	public int deleteOneDao(Map<String, Object> condMap)
	{
		List<Object> paramsList = new ArrayList<Object>();
		
		String sql = "delete from a_dynasty ";
		if(!"".equalsIgnoreCase(condMap.get("id") + "") && condMap.get("id") != null)
		{
			sql = sql + " where id = ? ";
			/*	为占位符赋值	*/
			paramsList.add(condMap.get("id"));
		}else if(!"".equalsIgnoreCase(condMap.get("name") + "") && condMap.get("name") != null)
		{
			sql = sql + " where name = ? " ;
			paramsList.add(condMap.get("name"));
		}
		return super.executeJDBC(sql, paramsList);
	}

	@Override
	public ADynasty selectOneDao(Map<String, Object> condMap)
	{
		/*	准备一个容器,这里面放的是参数	*/
		List<Object> paramsList = new ArrayList<Object>();
		String sql = "select * from a_dynasty ";
		if(!"".equalsIgnoreCase(condMap.get("id") + "") && condMap.get("id") != null)
		{
			sql = sql + " where id = ? ";
			/*	为占位符赋值	*/
			paramsList.add(condMap.get("id"));
		}else if(!"".equalsIgnoreCase(condMap.get("name") + "") && condMap.get("name") != null)
		{
			sql = sql + " where name = ? " ;
			paramsList.add(condMap.get("name"));
		}
		/*	调用 方法的时候先初始化	pojo	*/
		this.pojoObj = new ADynasty();
		
		return super.findOneJDBC(sql, paramsList);
	}

	@Override
	public List<ADynasty> selectListDao(PageInfoUtil pageInfoUtil  , Map<String, Object> condMap)
	{
			/*	拼装Sql语句	*/	
		List<Object> paramsList = new ArrayList<Object>();
		
		List<ADynasty> dynastyList = new ArrayList<ADynasty>();
			/*	操作数据库	*/ 	
		String sql = "select * from a_dynasty where 1 = 1  ";
			/*	通过 字符 查询	*/ 	                    
		if(condMap.get("keyword") != null 
				&& !"".equalsIgnoreCase(condMap.get("keyword") + "") )
		{
				/*	condMap 中放的 keyword; 并且不是空字符串		*/
			sql += " and (name like ? or capital like ? or context like ? ) ";
				/*	模糊匹配的%  就在这里赋值  不能再sql中 直接赋值	
				 *	为占位符赋值
				 */	
			paramsList.add("%" + condMap.get("keyword") + "%");
			paramsList.add("%" + condMap.get("keyword") + "%");
			paramsList.add("%" + condMap.get("keyword") + "%");
		}
		/*	通过状态查询	
	  	 *	状态可以是  整数 也可以是字符串  
	  	 *	不管是什么  都变成字符串
	  	 */
		if(condMap.get("status") != null && 
				!"".equalsIgnoreCase(condMap.get("status") + ""))
		{ 
				/*	condMap中放了状态  并且  不是字符串	*/
			sql += " and status = ? " ;
			paramsList.add(condMap.get("status"));
		}
		
		/*	通过时间查询	*/	
		if(condMap.get("stDate") instanceof Date 
				&& condMap.get("edDate") instanceof Date)
		{
			/* 时间 只用判断是不是 Date 类型就可以了	
			 * sql	
			 */
			sql += " and (pubTime >= ? and pubTime < ? ) " ;
			paramsList.add(condMap.get("stDate"));
			paramsList.add(condMap.get("edDate"));
		}
		
		/*	排序	*/	
		if("idAsc".equalsIgnoreCase(condMap.get("orderBy") + ""))
		{
			/*	升序	*/	
			sql += " order by id asc";
		}else if("idAscNameDesc".equalsIgnoreCase(condMap.get("orderBy")+""))
		{
			/*	先按ID排 如果有重复  就按名字排	*/ 
			sql += " order by id asc, name desc";
		}else
		{
			/*	如果都不成立  就按发布时间排	*/
			sql += " order by pubTime desc";
		}
		
		/*	调用 方法的时候先初始化	pojo	*/
		this.pojoObj = new ADynasty();
		
		if(pageInfoUtil != null)
		{
			/*	分页	*/
			return super.findListByPage(pageInfoUtil, sql, paramsList);
		}
		/*	不分页	*/
		return super.findList(sql, paramsList);
	}
}
